home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
System Booster
/
System Booster.iso
/
Archives
/
ForCLI
/
simplesort.lha
/
simplesort.doc
< prev
next >
Wrap
Text File
|
1994-10-05
|
9KB
|
253 lines
=====================================================================
SimpleSort V1.0
=====================================================================
(C) 1993/94 Helmut Neumann
*DAS* Sortierprogramm für den Amiga
0. Nutzungsbedingungen
======================
Dieses Programm wird unter der Idee der Share-Ware angeboten, die
Nutzung ist zu Test-Zwecken frei. Bei Gefallen und weitergehender
Nutzung ist eine Gebühr von 10,- DM an mich zu entrichten. Ich kann
natürlich eine Nutzung des Programm nicht kontrollieren, aber über
Bugreports nicht registrierter Benutzer bin ich verständlicherweise
nicht sehr erfreut. Es wird keine eingeschränkte Version des
Programms zu Testzwecken geben, ich kann also nur an das Gewissen der
Viel-Nutzer appellieren sich registrieren zu lassen. Ich übernehme
keinerlei Garantie für Fehlerfreiheit des Programms. Die Anwendung
dieses Programms kann die üblichen Fehler bis hin zu Verlust der
Daten der Platte bei unglücklichen Abstürzen hervorrufen. Das Archiv
darf ausschließlich mit der unveränderten Anleitung, der
BUGREPORT.FORM, SimpleSort und SimpleSort020 weitergegen werden.
Weitere Dateien haben im Archiv nichts zu suchen. Die Verursacher
von .displaymes und anderen schwachsinnigen Texten werden mit
Lindenstraße nicht unter 10 Folgen bestraft (mit Ton !!).
1. Einführung
=============
1.1. Das War :-( (Motivation)
-----------------------------
Jeder der bislang den Dos-Befehl Sort benutzen mußte wird zweierlei
festgestellt haben : Er braucht mindestens die Länge der
Eingabedatei und er ist vor allem recht langsam. Zwischenzeitlich
kamen mehrere Alternativen heraus, von denen llsort zwar schnell ist
aber die doppelte (!) Länge der zu sortierenden Datei als
zusammenhängenden Speicherblock braucht. Weiterhin gibt es noch
avlsort, welches sich neben seines Mindestspeicherbedarfs (auch hier
Länge der Eingabedatei) ebenso wie der Dos-Sort-Befehl durch extrem
langsame IO-Routinen auszeichnet. Dies ist alles nicht befriedigend
und spätestens bei allen Dateien die größer als der verfügbare
Hauptspeicher sind wird die Sortierung entweder unmöglich oder extrem
(!) langsam (wenn man den Umweg über eine virtuelle
Speicherverwaltung geht).
1.2. Das Ist :-)
----------------
Nun ist die erste Version des Sortierers fertig, der all diese
Nachteile ausbügelt. Hier die wichtigsten Features im Überblick :
- Die Größe der sortierbaren Dateien ist lediglich durch den
Plattenplatz beschränkt.
- Der vom Sortierer zu benutzende Speicher kann genau vorgegeben
werden.
- Es werden ausgereifte Caching-Routinen eingesetzt, um die üblichen
Nachteile bei Zeilenweisem Einlesen und Wegschreiben zu beheben.
- Um ein vielfaches schneller als die bislang verfügbaren
Sortierprogramme auf dem Amiga.
- Das append odd-length problem wird zur Steigerung der
IO-Geschwindigkeit erkannt und behoben.
2. Anwendung
============
2.1 Programmaufruf
------------------
SimpleSort sortiert eine vorgegebene (ASCII-) Datei auf die
Zieldatei. Die Syntax ist in der Minimal-Angabe Analog zu den
bisherigen Sortierprogrammen und erfordert mindestens die Angabe des
Namens der Eingabedatei und der Ausgabedatei :
SimpleSort infile outfile
2.2 Optionen
------------
Zusätzlich sind zur Steuerung des Default-Verhaltens des Programm
noch weitere Optionen vorgesehen, welche hinter dem Namen der
Eingabe- und der Ausgabe-Datei angegeben werden können :
-quiet
Es werden sämtliche Ausgaben des Programms incl. der
Copyright-Meldung unterdrückt. Ausgenommen hiervon sind
Fehlermeldungen.
-maxmem
SimpleSort darf den ganzen Speicher abzüglich einer Reserve von 10
Prozent des momentanen Fastmems benutzen.
-sloppy
Diese Option ermöglicht die Sortierung von Binär-Dateien. Die
Ausgabedatei kann hierbei eine geringfügig andere Länge haben.
-outbufsize size
Mit dieser Option kann man die Größe des Output-Buffers bestimmen.
size wird als gewünschte Bytes aufgefaßt, ein Wert von weniger als
10000 Bytes ist nicht sinnvoll und wird (ohne Fehlermeldung) nicht
akzeptiert. Default-Wert ist 256000 Bytes.
-inbufsize size
Mit dieser Option kann die Größe des Eingabepuffers festgelegt
werden. 10 Prozent dieses Speichers gehen allerdings für das Array
mit den Zeilennummern drauf. Als Default-Wert wird hier die Hälfte
des momentan verfügbaren Fastmems genommen, oder wenn kein Fastmem
verfuegbar ist (z.B. roher A1200) entsprechend das Chipmem. Es wird
aber immer die Reserve berücksichtigt, das heißt wenn man mehr
Speicher angibt als tatsächlich abzüglich der Reserve verfügbar ist,
dann ist das auch kein Problem.
-reserve size
Diese Option bietet in Kombination mit -maxmem eine bequeme
Möglichkeit eine Arbeitskonfiguration über den vom Programm zu
belassenen freien Speicher zu definieren. Hierbei ist als Reserve
ausschließlich Fastmem gemeint, hinzu kommt noch eventuell ;-)
vorhandenes Chipmem, welches nach Möglichkeit gar nicht tangiert
wird.
3. Interna
===========
3.1. (wie machen die das bloß :)
--------------------------------
SimpleSort verhält sich bei Dateien die bequem ins Fastmem passen
genau so wie die bisherigen Sortierprogramme, es ist nur um ein
vielfaches schneller. Hierbei ist zu beachten, daß SimpleSort nicht
(!) automatisch den maximal möglichen Speicher reserviert sondern
immer die Hälfte. Wer mehr wünscht, und das kann manchmal bei der
Sortierung von Dateien in einem Rutsch sinnvoll sein, der muß die
Option -maxmem verwenden oder die Größe des zu benutzenden Speichers
mit -inbufsize einstellen.
Wenn nun aber Dateien sortiert werden müssen, welche leider länger
sind als der verfügbare Speicher teilt simplesort diese in
vorsortierte Teildateien auf. In einem zweiten Schritt (nach Meldung
Phase 1 beendet) werden dann diese Einzeldateien nach dem
Merge-Sort-Prinzip (sortieren von mehreren bereits vorsortierten
Einzeldateien (Bändern)) zu einer neuen sortierten Datei. Hierbei
machen sich besonders die Cache-Routinen besonders bemerkbar, ohne
die das ganze doch ETWAS langsamer wäre, die HD-Lampe würde nur
glimmen, die HD würde kräftig rappeln und die Gesamt-Performance wäre
lausig. Die größte in der Testphase sortierte Datei war ein Logfile
mit 66 MB Länge. Diese Datei wurde mit einer Hauptspeichernutzung
von lediglich 1.5 MB in ca. 15 Minuten klaglos sortiert !
Der Nachteil des ganzen, wenn man überhaupt davon sprechen kann, ist
daß man kurzfristig die zweifache Länge der zu sortierenden Datei auf
der Zielplatte benötigt. Es wäre noch möglich eine Option
einzubauen, die nach Abschluß der ersten Phase die Eingabedatei
löscht, ich weiß aber nicht wie praxisgerecht dies wäre.
3.2. Was machen die bloß nicht :-(
----------------------------------
Tja, leider hat die Geschwindigkeit auch hier ihren Preis.
SimpleSort ist kein vollständiger Ersatz des Dos-Sort. Es kennt zum
Beispiel die Option Colstart nicht. Weiterhin sortiert SimpleSort
schlicht nach den ASCII-Werten, was manchmal zu anderen Ergebnissen
als die der bisherigen Sortierer führt. SimpleSort ist auch nicht
Pipe-fähig, es lassen sich damit in der momentanen Version lediglich
Dateien sortieren.
3.3. Known bugs :-((
--------------------
Es gibt einen Fehler im Quicksort (es wird der vom Compiler
angebotene benutzt) der dazu führt daß dieser bei bestimmten
Eingabekonfigurationen nicht terminiert. Dies hängt anscheinend von
der Anzahl der zu sortierenden Zeilen und der Konsistenz der Daten
ab. Ich hatte bisher zwar lediglich eine Beispieldatei finden können
bei der sich dieses Verhalten zeigte (eine 4 MB lange Liste von
einzelnen Wörtern), aber einmal ist einmal zuviel. Abhilfe schafft
hier nur die Reduzierung des inbufsize, dann werden auch solche
Dateien ordentlich sortiert. Sollte sich dieser Fehler in der Praxis
in der realen Welt häufiger zeigen werde ich wohl den Quicksort
selbst programmieren. Bei Dateien die nicht mit einem cr enden werden
in der Zieldatei alle Zeichen danach abgeschnitten.
4. Nachwort (Shareware-Info)
============================
Die Entwicklung dieses Programms hat mich einige Arbeit gekostet.
Ich bitte jeden dies bei Gefallen zu honorieren und die Gebühr zu
entrichten. Eine Weiterentwicklung des ganzen ist auch von der
Resonanz abhängig. Meine Bankverbindung lautet :
Helmut Neumann
Stadtsparkasse Aachen
Blz. 39050000
Konto 16012726
Bei Übersendung des Geldes bitte eine Mail an mich zur Information.
Bug-Reports bitte DETALLIERT (notfalls mit den verursachenden
Dateien) an mich senden. Ich bitte auch am Anfang, wo sich
wahrscheinlich einige DICKE Fehler zeigen, um sofortige Meldung
derselben und um Meldung eigener Bedürfnisse. Dazu bitte die
bugreport.form verwenden. Ich bin im Netz unter folgenden Adressen
erreichbar :
Z-Netz : helmutn@tron.gun.de
Internet : helmutn@tron.gun.de
Bis dann, Helmut.